# -*- coding: utf-8 -*-

"""
@File    : request200512_知乎热搜榜.py
@notice  : 爬取知乎热搜榜列表&热度&链接
"""

import re
import requests
import datetime
import pandas as pd
from fake_useragent import UserAgent

Domain_Name = 'https:'
headers = {
    'User-Agent': UserAgent().random,
    'Referer': "https://www.zhihu.com/billboard"
}

url = 'https://www.zhihu.com/billboard'

response = requests.get(url, headers=headers)

html = response.text
print('----------------分割线----------------')

# 这里通过正则来解析页面
#re.M 多行匹配，影响 ^ 和 $
#\s	匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
#\S	匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。\s\S全部字符都可以
#?表示懒惰模式。也称非贪婪模式。
# 就意味着匹配任意数量的重复，但是在能使整个匹配成功的前提下使用最少的重复
# + 表示：匹配前面的子表达式一次或多次(大于等于1次）。
#   例如，“zo+”能匹配“zo”以及“zoo”，但不能匹配“z”
content = re.findall(r'<div class="HotList-itemTitle">([\s\S]+?)</div>', html, re.M)  # 获取问题内容
hot = re.findall(r'<div class="HotList-itemMetrics">([\s\S]+?)</div>', html, re.M)  # 获取问题热度
url = re.findall(r'"link":{"url":"([\s\S]+?)"}},', html, re.M)  # 获取问题超链接
describe = re.findall(r'"excerptArea":{"text":"([\s\S]+?)"},', html, re.M)  # 获取问题超链接
print(content)
# dts = []
# for i in range(len(content)):
#     lst = []
#     lst.append(content[i])
#     lst.append(hot[i])
#     lst.append(str(url[i]).replace('u002F', ''))
#     dts.append(lst)
# df = pd.DataFrame(dts, columns=['问题名称', '问题热度', '链接'])
# df.to_excel('./zhihu热搜榜' + str(datetime.datetime.now().strftime('%Y%m%d')) + '.xlsx',
#             encoding='gbk')  # 写入excel中
# print('爬取完成')

